package day0113;

import java.util.Arrays;

import org.junit.Test;

public class StringDemo {
	@Test
	public void test1() {
		//“abc”双引号括起来的字符串：常量字符串，也是一个对象
		//1.8之后常量池放在堆里面，在常量池里面找有没有“abc”对象
		//如果常量池里没有这个字符串对象，java就帮你在常量池里new一个"abc"字符串对象
		//如果常量池里有这个字符串，就把这个字符串的地址赋给这个变量
		String str1 = "abc";
		String str2 = new String("abc");
		String str3 = "abc";
		//  == 比较的是变量存放的地址值
		System.out.println(str1 == str2); //false
		System.out.println(str1 == str3); //true
		System.out.println(str2 == str3); //false
		
		//比较字符串是不是想等用equals()
		//比较str1字符串和str2字符串内容是否相等
		System.out.println(str1.equals(str2));  //true
		System.out.println(str1.equals(str3));	//true
		System.out.println(str2.equals(str3));	//true
	}
	//获取string字符串
	@Test
	public void test2() {
		String str = "java AndroidA";
		System.out.println(str.length());  //数组长度为13
		char[] array = str.toCharArray();  //将字符串转换成字符数组
		System.out.println(Arrays.toString(array));//输出转换成字符的数组
		char ch = str.charAt(5);  //返回下标是5的字符
		System.out.println(ch);   // 字符下标为5的是 A
		
		System.out.println(str.indexOf('A')); //5   A的索引的位置
		System.out.println(str.indexOf('X')); //-1  如果没有这个字符  返回-1
		System.out.println(str.indexOf('A', 6)); // 12   从下标第六个开始找到A索引的位置返回数组下标
		System.out.println(str.indexOf("And")); // 5  找到字符串  并且返回A的下标
		
		System.out.println(str.lastIndexOf('A')); // 12  最后一个A的下标
	}
	
	//判断string字符串
	@Test
	public void test3() {
		String str = "java AndroidA";
		System.out.println(str.contains("And"));  //true
		System.out.println(str.startsWith("java")); //true  是否以java开头
		System.out.println(str.endsWith("idA")); //true  是否以idA开头
		System.out.println(str.isEmpty()); //false  判断字符串是否为空 
		
		System.out.println("".isEmpty()); //true
	}
	
	//转换string字符串
	@Test
	public void test4() {
		
		char[] array = {'j','a','v','a',' ','A','n','d'};
		String str = new String(array);
		System.out.println(str);
	}
	//替换
	@Test
	public void test5() {
		String str = "java AndroidA";
		String newStr = str.replace('A', 'B');
		//str.replace('A', 'B');
		System.out.println(str);
		System.out.println(newStr);
	}
	// 切割
	@Test
	public void test6() {
		String str = "java AndroidA python";
		String[] array = str.split(" ");
		System.out.println(Arrays.toString(array));
	}
	
	//字串  获取字符串中的一部分
	@Test
	public void test7() {
		//subtree 子树  subString 子字符串
		String str = "java AndroidA";
		System.out.println(str.substring(5)); //从下标为5开始到最后    AndroidA
		System.out.println(str.substring(5, 8));//截取5，6，7，不包括8  And
	}
	
	// 转换，去除空格，比较
	@Test
	public void test8() {
		String str = "    java AndroidA    ";
		System.out.println(str); //    java AndroidA    
		System.out.println(str.trim());    //java AndroidA
		
	}
	
	@Test
	public void test9() {
		String str1 = "Hello";
		String str2 = "Java";
		String str3 = "Android";
		String str4 = "python";
		//String的长度是不能改变的，每次变量的拼接实际上是new了一个字符串对象
		//在String字符串变量拼接（+）会创建很多字符串对象，实际上只使用最后一个字符串对象
		String str = str1 + str2 + str3 + str4;
		System.out.println(str);
		
		//在有很多字符串拼接时候不使用String，使用StringBuilder或者StringBuffer
		StringBuffer buffer = new StringBuffer(str1);
		buffer.append(str2);
		buffer.append(str3);
		buffer.append(str4);
		System.out.println(buffer);
		
		StringBuilder builder = new StringBuilder(str1);
		builder.append(str2);
		builder.append(str3);
		builder.append(str4);
		System.out.println(builder);
	}
}
